package jp.bsws.action.master;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpSession;

import jp.bsws.bean.TenpoBean;
import jp.bsws.common.BSWSConstants;
import jp.bsws.common.BSWSSession;
import jp.bsws.common.BSWSUtils;
import jp.bsws.common.DBUtils;
import jp.bsws.dao.BSWSDao;
import jp.bsws.dao.TenpoDao;
import jp.bsws.model.TenpoModel;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/*
 * メインメニューアクションクラス
 */
public class TenpoMasterAction extends ActionSupport {
	private static final long serialVersionUID = 1L;

	private BSWSSession bSWSSession;

	public String getLoginJugyoinKnj() { return bSWSSession.getStrJugyoinKnj(); }

	private List<TenpoBean> tenpoBeanList;
	private Integer intTaisyoSeq;

	public void validateUpdateTenpo() {

		//セッション情報を取得
		HttpSession session = ServletActionContext.getRequest().getSession();
		bSWSSession = (BSWSSession) session.getAttribute(BSWSConstants.KEY_SESSION);

		//必須チェック
		for(int i =0; i < tenpoBeanList.size(); i++){
			TenpoBean tenpoBean = tenpoBeanList.get(i);
			if (BSWSUtils.isBlankNull(tenpoBean.getStrTenpoKnj())) {
				addFieldError("tenpoBeanList[" + i + "].strTenpoKnj", "No" + (i + 1) + "の店舗名称を入力して下さい。");
			}
			if (BSWSUtils.isBlankNull(tenpoBean.getStrJusyoKnj())) {
				addFieldError("tenpoBeanList[" + i + "].strJusyoKnj",  "No" + (i + 1) + "の住所を入力して下さい。");
			}
			if (!BSWSUtils.checkNumber(tenpoBean.getStrGyoSu())) {
				addFieldError("tenpoBeanList[" + i + "].strGyoSu",  "No" + (i + 1) + "の来店情報入力行数を数値で入力して下さい。");
			}
			if (tenpoBean.getStrKaitenYmd() == null) {
				addFieldError("tenpoBeanList[" + i + "].strKaitenYmd", "No" + (i + 1) + "の開店日を数値で入力して下さい。");
			}else{
				if(!BSWSUtils.checkDate(tenpoBean.getStrKaitenYmd())){
					addFieldError("tenpoBeanList[" + i + "].strKaitenYmd", "No" + (i + 1) + "の開店日を正しい日付で入力して下さい。");
				}
			}
			if (tenpoBean.getStrHeitenYmd() == null) {
				addFieldError("tenpoBeanList[" + i + "].strHeitenYmd", "No" + (i + 1) + "の閉店日を数値で入力して下さい。");
			}else{
				if(!BSWSUtils.checkDate(tenpoBean.getStrHeitenYmd())){
					addFieldError("tenpoBeanList[" + i + "].strHeitenYmd", "No" + (i + 1) + "の閉店日を正しい日付で入力して下さい。");
				}
			}
		}
	}

	private void init() throws Exception{
		//セッション情報を取得
		HttpSession session = ServletActionContext.getRequest().getSession();
		bSWSSession = (BSWSSession) session.getAttribute(BSWSConstants.KEY_SESSION);
	}

	@Override
	public String execute() throws Exception{

		//初期設定
		init();

		Connection con = DBUtils.getConnection();
		try{
			//画面表示内容の設定
			hyojiJunbi(con);
		}finally{
			con.close();
		}

		return SUCCESS;
	}

	/**
	 * 店舗追加
	 * @return SUCCESS
	 * @throws Exception
	 */
	public String add() throws Exception{

		init();

		TenpoBean tenpoBean = new TenpoBean();
		tenpoBean.setStrGroupCod(bSWSSession.getStrGroupCod());
		tenpoBeanList.add(tenpoBean);

		return SUCCESS;
	}

	public String updateTenpo() throws Exception{

		TenpoDao tenpoDao = new TenpoDao();

		//初期設定
		init();

		Connection con = DBUtils.getConnection();
		try{
			//店舗情報追加更新対象取得
			for(TenpoBean tenpoBean : tenpoBeanList) {
				int cnt = 0;
				if(tenpoBean.getSeq() != null){
					//店舗情報更新
					cnt = tenpoDao.updateTenpo(con, bSWSSession.getStrJugyoinCod(), tenpoBean.getSeq(), tenpoBean);
				}else{
					if(BSWSUtils.isNotBlankNull(tenpoBean.getStrTenpoKnj())
							&& BSWSUtils.isNotBlankNull(tenpoBean.getStrJusyoKnj())
							&& BSWSUtils.isNotBlankNull(tenpoBean.getStrGyoSu())
							&& BSWSUtils.isNotBlankNull(tenpoBean.getStrKaitenYmd())
							&& BSWSUtils.isNotBlankNull(tenpoBean.getStrHeitenYmd())
					){
						//店舗情報更新
						cnt = tenpoDao.insertTenpo(con, null, bSWSSession, tenpoBean);
					}
				}
				if(cnt == 0){
					//処理なし
				}
			}

			//画面表示内容の設定
			hyojiJunbi(con);

			con.commit();
		}catch(SQLException se){
			con.rollback();
		}finally{
			con.close();
		}

		return SUCCESS;
	}

	public String deleteTenpo() throws Exception{

		TenpoDao tenpoDao = new TenpoDao();

		//初期設定
		init();

		Connection con = DBUtils.getConnection();
		try{
			//店舗論理削除
			int cnt = tenpoDao.changeDelFlg(con, intTaisyoSeq, BSWSConstants.C_DEL_FLG_DEL);
			if(cnt == 0){
				//処理なし
			}

			//画面表示内容の設定
			hyojiJunbi(con);

			con.commit();
		}catch(SQLException se){
			con.rollback();
		}finally{
			con.close();
		}

		return SUCCESS;
	}

	private void hyojiJunbi(Connection con) throws Exception{
		//店舗マスタ情報を取得
		getTenpoJoho(con);
	}

	private void getTenpoJoho(Connection con) throws Exception{

		BSWSDao bSWSDao = new BSWSDao();

		this.tenpoBeanList = new ArrayList<TenpoBean>();
		this.tenpoBeanList.clear();
		//店舗マスタ情報を取得
		ArrayList<TenpoModel> tenpoList = bSWSDao.getTenpoJoho(con, null, bSWSSession.getStrGroupCod(), null, null);
		for(int i = 0; i < tenpoList.size(); i++){
			TenpoBean tb = new TenpoBean();
			tb.setSeq(tenpoList.get(i).getSeq());
			tb.setStrGroupCod(tenpoList.get(i).getStrGroupCod());
			tb.setStrTenpoCod(tenpoList.get(i).getStrTenpoCod());
			tb.setStrTenpoKnj(tenpoList.get(i).getStrTenpoKnj());
			tb.setStrJusyoKnj(tenpoList.get(i).getStrJusyoKnj());
			tb.setStrGyoSu(String.valueOf(tenpoList.get(i).getIntGyoSu()));
			tb.setStrKaitenYmd(String.valueOf(tenpoList.get(i).getIntKaitenYmd()));
			tb.setStrHeitenYmd(String.valueOf(tenpoList.get(i).getIntHeitenYmd()));
			tb.setStrHyojiJun(String.valueOf(tenpoList.get(i).getIntHyojiJun()));
			this.tenpoBeanList.add(tb);
		}
	}

	public BSWSSession getBSWSSession() {
		return bSWSSession;
	}

	public void setBSWSSession(BSWSSession bSWSSession) {
		this.bSWSSession = bSWSSession;
	}

	public List<TenpoBean> getTenpoBeanList() {
		return tenpoBeanList;
	}

	public void setTenpoBeanList(List<TenpoBean> tenpoBeanList) {
		this.tenpoBeanList = tenpoBeanList;
	}

	public Integer getIntTaisyoSeq() {
		return intTaisyoSeq;
	}

	public void setIntTaisyoSeq(Integer intTaisyoSeq) {
		this.intTaisyoSeq = intTaisyoSeq;
	}
}